package cl.tinet.trainee.salas.ejb.sala;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import cl.tinet.trainee.salas.dao.SalaDao;
import cl.tinet.trainee.salas.dao.SalaDaoInterfaz;
import cl.tinet.trainee.salas.model.ReservaSala;
import cl.tinet.trainee.salas.model.Sala;
import cl.tinet.trainee.salas.model.excepciones.GeneralException;

//Objeto queda persistente el bean
@Stateless(mappedName = "SalaBean", name = "SalaBean")
public class SalaBeanImpl implements SalaBeanInterfaz {
    /**
     * Instancia de la clase UsuarioDao.
     */
    private SalaDaoInterfaz dao;
    /**
     * Nombre de la persistencia que esta haciendo la conexion a al BD.
     */
    @PersistenceContext(unitName = "MySqlDS")
    private EntityManager em;

    @Resource
    SessionContext ctx;
    @PostConstruct
    private void init() {
        if (dao == null) {
            dao = new SalaDao(em);
        }
    }
    public EntityManager getEm() {
        return em;
    }

    public void setEm(EntityManager em) {
        this.em = em;
    }

    /** {@inheritDoc} */
    public Sala buscarBean(Sala dato) {
        // TODO Auto-generated method stub
        return null;
    }

    /** {@inheritDoc} */
    public void buscarAgregado(Sala dato) {
        // TODO Auto-generated method stub

    }

    /** {@inheritDoc} */
    public void modificarBean(Sala datosSala) {
        Sala sala = dao.buscarSala(datosSala);
        sala.modificarDatosSala(sala);
        dao.modificarSala(sala);
    }

    /** {@inheritDoc} */
    public void eliminarBean(Sala dato) {
        Sala sala = dao.buscarSala(dato);
        dao.borrarSala(sala);

    }

    /** {@inheritDoc} */
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void agregarBean(Sala sala) {
        dao.agregarSala(sala);

    }

    /**
     * {@inheritDoc}
     * 
     * @throws GeneralException
     */
    public List<Sala> buscarTodos() {
        List<Sala> sala = null; 
        sala = dao.buscarListaSalas();
        return sala;
        
    }
    /** {@inheritDoc} */
    public boolean buscarReservasSala(Sala datosSala) {
        List<ReservaSala> sala = null;
        sala = dao.buscarReservaSalas(datosSala);
        if (sala.isEmpty()){
            return true;
        }else{
            return false;
        }
    }

}
